package ocg.common.re.reports;

import com.aventstack.extentreports.AnalysisStrategy;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.ResourceCDN;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import com.aventstack.extentreports.reporter.configuration.ChartLocation;
import com.aventstack.extentreports.reporter.configuration.Theme;

public class ExtentManager {

    private static ExtentReports extent;

    /**
     * 创建测试报表，添加Html报表模型
     * @param path     报表输出路径
     */
    public static void build( String path ){
        if ( extent == null ){
            extent = new ExtentReports();
//          设置系统属性
            extent.setSystemInfo("操作系统", "win7");
            extent.setSystemInfo("数据库验证","打开");
            extent.attachReporter( getReport( path ));
//          报表使用手动配置
            extent.setReportUsesManualConfiguration(false);
            // test view (default):
//            extent.setAnalysisStrategy(AnalysisStrategy.TEST);

// suite view:
//            extent.setAnalysisStrategy(AnalysisStrategy.SUITE);

// class view:
            extent.setAnalysisStrategy(AnalysisStrategy.CLASS);
        }
    }

    /**
     * 注册 ExtentHtmlReporter 报表
     * @param path      报表输出路径
     * @return          ExtentHtmlReporter
     */
    public static ExtentHtmlReporter getReport( String path){
        // 注册HTML报表 path: extent.html
        ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter( path );
//      文档名称
        htmlReporter.config().setDocumentTitle("小程序Api自动化测试报告");
//      报告名称
        htmlReporter.config().setReportName("小程序Api自动化测试报告");
//      设置测试图表位置， TOP 顶部 ； BOTTOM  底部
        htmlReporter.config().setTestViewChartLocation(ChartLocation.BOTTOM);
//      打开视界图
        htmlReporter.config().setChartVisibilityOnOpen(true);

        //设置静态文件的DNS 如果cdn.rawgit.com访问不了，可以设置为：ResourceCDN.EXTENTREPORTS 或者ResourceCDN.GITHUB
        htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
//      设置自定义样式
//      htmlReporter.config().setCSS(" .node.level-1{ background-color: #fafafa;}");
//      设置主题  STANDARD ：白色  DARK ：黑色
        htmlReporter.config().setTheme(Theme.STANDARD);
        // encoding, default = UTF-8
        htmlReporter.config().setEncoding("UTF-8");
        // 附加报告，将日志生成在一个报表中
        htmlReporter.setAppendExisting(true);
        return htmlReporter;
    }

    /**
     * 创建测试
     * @param TestName      测试名称
     * @return              ExtentTest
     */
    public static ExtentTest createTest( String TestName ){
        return extent.createTest( TestName );
    }

    /**
     * 创建测试
     * @param TestName      测试名称
     * @param description   一个简短的测试描述
     * @return              ExtentTest
     */
    public static ExtentTest createTest( String TestName , String description){
        return extent.createTest( TestName , description );
    }

    /**
     * 在父测试的对象上创建测试节点
     * @param parentTest        父测试对象
     * @param TestName          子测试名称
     * @return                  ExtentTest
     */
    public static ExtentTest createNodeTest( ExtentTest parentTest , String TestName){
        return parentTest.createNode( TestName );
    }

    /**
     * 在父测试的对象上创建测试节点
     * @param parentTest        父测试对象
     * @param TestName          子测试名称
     * @param description       一个简短的测试描述
     * @return                  ExtentTest
     */
    public static ExtentTest createNodeTest( ExtentTest parentTest , String TestName , String description){
        return parentTest.createNode( TestName );
    }

    /**
     * 从测试集中删除已启动的测试
     * @param TestName  测试名称
     */
    public static void removeTest( ExtentTest TestName ){
        extent.removeTest( TestName );
    }

    /**
     * 设置系统属性
     * @param name      属性名称
     * @param value     属性值
     */
    public static void setSystemInfo( String name , String value ){
        extent.setSystemInfo( name , value );
    }

    /**
     * 调用flush将所有内容写入日志文件。
     */
    public static void flush(){
        extent.flush();
    }
}
